The Controller Area Network protocol is generally known and was originally developed in the 1980s for connecting control units in automotive environments. Presently CAN is used in many applications particularly where electrical interference may be present. Typically a CAN module or controller is deployed together with, e.g., can be included or embedded with a microcontroller, and a CAN bus (bus using CAN protocols) is used to facilitate communication between an assortment of such microcontrollers.
The CAN module normally includes a CAN engine that implements the specifics of the protocol and interfaces directly to the CAN bus. Further included is a Host interface that supports an interface with the host, e.g., the microcontroller, and buffers information or data that is being transferred between the microcontroller and the CAN engine.
Present approaches for the data buffering generally use either a mailbox or a FIFO (first in first out) model or approach. In the mailbox model, blocks of memory are allocated to store data and the data is stored according to an ID (Identifier) associated with the data and the destination can use or recall the data in any order. In the FIFO model, data is stored or queued and delivered to or read by the microcontroller or CAN engine (depending on direction) according to the order of arrival. Some CAN modules allow use of both schemes, however these modules are inefficient in terms of memory allocation since memory is dedicated to one of the approaches and thus is not available for the other.
Each of these approaches has problems. For example, it is difficult to assign and manage priorities, i.e., send high priority data before low priority data, using the FIFO approach. The mailbox model does not support data movement in any particular order and is susceptible to data loss, i.e., for a given mailbox allocation, later data may overwrite earlier data before the earlier data is read.